
// 单例模式就是一个构造函数只实例化一个对象
const Person = (function () {
  // 构造函数
  function Person(name, age, gender) {
    this.name = name
    this.age = age
    this.gender = gender
  }

  // 实例对象
  // 利用闭包防止instance被回收
  let instance = null

  return function singleTon(...args) {
    // 如果实例对象不存在
    if (!instance) {
      instance = new Person(...args)
    }

    // 返回实例对象
    return instance
  }
})()

// 此处的new可写可不写
let p1 = new Person('coderzrf', 23, '男')
let p2 = new Person()

console.log(p1 === p2)